package com.lh.jianzhioffer.专项练习.栈;

import org.omg.PortableInterceptor.INACTIVE;

import java.util.Stack;

/**
 * @author: linghao
 * @since: 2023/3/26
 *
 * 根据 逆波兰表示法，求该后缀表达式的计算结果。
 *
 * 有效的算符包括 +、-、*、/ 。每个运算对象可以是整数，也可以是另一个逆波兰表达式。
 *
 * 说明：
 * 整数除法只保留整数部分。
 * 给定逆波兰表达式总是有效的。换句话说，表达式总会得出有效数值且不存在除数为 0 的情况。
 *
 *
 */
public class 后缀表达式036 {

    /**
     * 将后缀表达式往栈中放，遇到运算符就弹出两个运算对象进行运算
     * @param tokens
     * @return
     */

    String operator = "+-*/";
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for(String token : tokens){
            if(operator.indexOf(token) != -1){
                Integer right = Integer.valueOf(stack.pop());
                Integer left = Integer.valueOf(stack.pop());
                switch (token){
                    case "+":
                        stack.push(left + right);
                        break;
                    case "-":
                        stack.push(left - right);
                        break;
                    case "*":
                        stack.push(left * right);
                        break;
                    case "/":
                        stack.push(left / right);
                        break;
                }
            }else{
                stack.push(Integer.valueOf(token));
            }
        }
        return stack.pop();
    }

}
